home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / Other Langs / mpw yacc ƒ src / error.c < prev    next >
C/C++ Source or Header  |  1989-11-19  |  4KB  |  217 lines

  1. #include <stdio.h>
  2. #include <signal.h>
  3. #include "defs.h"
  4. #include "files.h"
  5. #include "text.h"
  6. #include "symtab.h"
  7.  
  8. #ifdef MACINTOSH
  9. #define KILL exit()
  10. #else
  11. #define    KILL        ((void) kill(getpid(), SIGQUIT))
  12. #endif
  13.  
  14. extern int lineno;
  15.  
  16. warn(msg)
  17. char *msg;
  18. {
  19.   fprintf(stderr, "warning:  %s\n", msg);
  20. }
  21.  
  22. error(lineno, msg)
  23. int lineno;
  24. char *msg;
  25. {
  26.   fprintf(stderr, "File \"%s\"; line %d # error:  %s\n",
  27.       input_file_name, lineno, msg);
  28.   tidy();
  29.   exit(1);
  30. }
  31.  
  32. aborted()
  33. {
  34.   fprintf(stderr, "Aborted.\n");
  35.   tidy();
  36.   exit(2);
  37. }
  38.  
  39. fatal(msg)
  40. char *msg;
  41. {
  42.   fprintf(stderr, "fatal error:  %s\n", msg);
  43.   tidy();
  44.   exit(2);
  45. }
  46.  
  47. fatal2(msg1, msg2)
  48. char *msg1, *msg2;
  49. {
  50.   fprintf(stderr, "fatal error:  %s%s\n", msg1, msg2);
  51.   tidy();
  52.   exit(2);
  53. }
  54.  
  55. panic(name)
  56. char *name;
  57. {
  58.   fprintf(stderr, "PANIC!!!  INTERNAL ERROR IN %s\n", name);
  59.   KILL;
  60. }
  61.  
  62. open_error(filename)
  63. char *filename;
  64. {
  65.   fatal2("cannot open ", filename);
  66. }
  67.  
  68. illegal_character(c)
  69. register int c;
  70. {
  71.   if (PRINTABLE(c))
  72.     fprintf(stderr, "File \"%s\"; line %d # error:  illegal character '%c'\n",
  73.         input_file_name, lineno, c);
  74.   else
  75.     fprintf(stderr, "File \"%s\"; line %d # error:  illegal character '\\%o'\n",
  76.         input_file_name, lineno, c);
  77.   tidy();
  78.   exit(1);
  79. }
  80.  
  81. retyped_warning(bp)
  82. bucket *bp;
  83. {
  84.   fprintf(stderr, "File \"%s\"; line %d # warning:  the type of %s has been \
  85. redeclared\n", input_file_name, lineno, bp->prname);
  86. }
  87.  
  88. revalued_warning(bp)
  89. bucket *bp;
  90. {
  91.   fprintf(stderr, "File \"%s\"; line %d # warning:  the token number of %s has been \
  92. redeclared\n", input_file_name, lineno, bp->prname);
  93. }
  94.  
  95. value_error(value)
  96. int value;
  97. {
  98.   fprintf(stderr, "File \"%s\"; line %d # error:  the token number %d has been \
  99. assigned to two different tokens", input_file_name, lineno, value);
  100.   tidy();
  101.   exit(1);
  102. }
  103.  
  104. reprec_warning(bp)
  105. bucket *bp;
  106. {
  107.   fprintf(stderr, "File \"%s\"; line %d # warning:  the precedence of %s has been \
  108. redeclared\n", input_file_name, lineno, bp->prname);
  109. }
  110.  
  111. terminal_start(bp)
  112. bucket *bp;
  113. {
  114.   fprintf(stderr, "File \"%s\"; line %d # error:  the start symbol %s is a token\n",
  115.       input_file_name, lineno, bp->prname);
  116.   tidy();
  117.   exit(1);
  118. }
  119.  
  120. no_rhs_warning()
  121. {
  122.   fprintf(stderr, "File \"%s\; line %d # warning:  the default action assigns an \
  123. undefined value to $$\n", input_file_name, lineno);
  124. }
  125.  
  126. default_type_clash()
  127. {
  128.   fprintf(stderr, "File \"%s\"; line %d # warning:  type clash in default action\n",
  129.       input_file_name, lineno);
  130. }
  131.  
  132. int
  133. get_error_line(tp, s)
  134. text *tp;
  135. register char *s;
  136. {
  137.   register char *t;
  138.   register int n;
  139.  
  140.   n = tp->start_line;
  141.   for (t = tp->ch; t < s; t++)
  142.     if (*t == NEWLINE) n++;
  143.  
  144.   return (n);
  145. }
  146.  
  147. type_tag_error(tp, s)
  148. text *tp;
  149. char *s;
  150. {
  151.   error(get_error_line(tp, s), "malformed type tag");
  152. }
  153.  
  154. lhs_type_error(tp, s)
  155. text *tp;
  156. char *s;
  157. {
  158.   error(get_error_line(tp, s), "$$ must be typed");
  159. }
  160.  
  161. dollar_error(tp, s)
  162. text *tp;
  163. char *s;
  164. {
  165.   error(get_error_line(tp, s), "malformed $-symbol");
  166. }
  167.  
  168. rhs_error(tp, s, number, rhslen)
  169. text *tp;
  170. char *s;
  171. int number, rhslen;
  172. {
  173.   register int n;
  174.  
  175.   n = get_error_line(tp, s);
  176.   fprintf(stderr, "File \"%s\"; line %d # error:  $%d appears in an action routine \
  177. for a", input_file_name, n, number);
  178.   if (rhslen == 0)
  179.     fprintf(stderr, "n empty rule\n");
  180.   else if (rhslen == 1)
  181.     fprintf(stderr, " rule with only one symbol on its rhs\n");
  182.   else
  183.     fprintf(stderr, " rule with only %d symbols on its rhs\n", rhslen);
  184.  
  185.   tidy();
  186.   exit(1);
  187. }
  188.  
  189. rhs_type_error(tp, s, number)
  190. text *tp;
  191. char *s;
  192. int number;
  193. {
  194.   register int n;
  195.  
  196.   n = get_error_line(tp, s);
  197.   fprintf(stderr, "File \"%s\"; line %d # error:  $%d must be typed\n",
  198.       input_file_name, n, number);
  199.  
  200.   tidy();
  201.   exit(1);
  202. }
  203.  
  204. undefined_warning(bp)
  205. register bucket *bp;
  206. {
  207.   fprintf(stderr, "File \"%s\; line %d # warning:  %s is undefined\n",
  208.       input_file_name, lineno, bp->prname);
  209. }
  210.  
  211. no_goal(bp)
  212. register bucket *bp;
  213. {
  214.   fprintf(stderr, "fatal error:  the symbol symbol %s is undefined\n",
  215.       bp->prname);
  216. }
  217.